fix(session_start): point an installed hook at plumb hooks, not at installing it - #548
Merged
Merged
Conversation
…installing it When a call arrived without a per-call identity, session_start's notices said only "`plumb hooks install claude-code` stamps every call". With the hook already installed, the usual cause is a daemon too old to accept the key Claude desktop's connector passes through (found by dogfooding on a pre-#531 build). The advice sent the caller round in a circle. Both notices now add that `plumb hooks` says why the call was not stamped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Plumb-Session: scarlet-viper
…xplains the call The stamp notices told a caller with an installed hook that `plumb hooks` says why the call was not stamped. It does not always: for a missing or stale hook, or a daemon that is old or does not list plumb_agent, it reports the fault, but with a current hook and a daemon that accepts the stamp it has nothing to report, so the promise sent that reader round in a circle again. Both notices now say that, if the hook is installed, `plumb hooks` checks it and the daemon. The clause is also twelve bytes shorter than the one it replaces, which matters: in a loaded workspace the brief packet carrying the dormant notice is within a few bytes of its 1536-byte bound, and the unchanged byte budget test never renders either notice. The test pins the new clause and rejects "says why". Mutants run through go test -overlay were all killed: the pointer dropped from the refused notice, "says why" restored in either notice, and the install remedy dropped from the dormant notice. The CHANGELOG entry now describes what the command reports. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Plumb-Session: giant-bison
atlas-from-plumb
enabled auto-merge
October 1, 2026 09:43
golimpio
previously approved these changes
Oct 1, 2026
golimpio
left a comment
Contributor
There was a problem hiding this comment.
Re-approving after update-branch.
Collaborator
Author
|
Correction to the re-approval note: after merging main, only the build and the size and changelog checks ran locally. The targeted test run didn't start, because the test cache directory was missing. The test gate for this head is CI's full run, which auto-merge waits for. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Found by dogfooding plumb from a Claude desktop Code-tab session running a daemon built before #531. The hook was installed and stamping, but the daemon didn't advertise
plumb_agent, so the connector stripped the stamp.session_start's notice then said only "plumb hooks install claude-codestamps every call", which sent the caller in a circle to install something it already had.Change
Both no-identity notices (refused and dormant) in
internal/tools/session_start_stamp.gonow add thatplumb hookssays why the call was not stamped. #536 madeplumb hooksstatus report a daemon that doesn't listplumb_agent, so that command gives the real reason.Tests
TestStampChannelNotices_PointAnInstalledHookAtItsDiagnosispins both notices. The brief-packet byte budget still passes.GOWORK=off go test ./... -count=1and-tags=integration ./internal/cli/: ok. The CHANGELOG entry is under 0.20.4 (unreleased), and the placement check passes.🤖 Generated with Claude Code